package study.oss测试;

import cn.hutool.http.HttpResponse;
import cn.hutool.http.server.HttpServerResponse;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.GetObjectRequest;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.Collection;
import java.util.Locale;

/**
 * @Author 刘伟涛
 * @Date 2024/6/28 13:59
 **/
public class DownloadObject {
    public static void main(String[] args) throws IOException {
    // 设置阿里云OSS访问凭证
    String endpoint = "http://oss-cn-shenzhen.aliyuncs.com";
    String accessKeyId = "LTAI5tLtxS5UW8HR9MFKnb5P";
    String accessKeySecret = "62oVaKMuNerriUZHke1IKHz5VLTzIF";

    // 创建OSSClient实例
    OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

    String bucketName = "lims2-0";
//    String keyName = "temposs.doc";
    String pre = "dev";
       String fileKey = "c41b59843311424496131de02e6cd33c";
    String downloadFilePath =  "dev/c41b59843311424496131de02e6cd33c.doc"; // 修改为你的下载路径
    File file = File.createTempFile("temposs", ".doc");

    // 下载文件
    ossClient.getObject(new GetObjectRequest(bucketName, downloadFilePath), file);
    System.out.println("File downloaded: "+file);

    // 关闭OSSClient
    ossClient.shutdown();

//        HttpServletResponse response = new HttpServletResponse() {
//            @Override
//            public void addCookie(Cookie cookie) {
//
//            }
//
//            @Override
//            public boolean containsHeader(String s) {
//                return false;
//            }
//
//            @Override
//            public String encodeURL(String s) {
//                return null;
//            }
//
//            @Override
//            public String encodeRedirectURL(String s) {
//                return null;
//            }
//
//            @Override
//            public String encodeUrl(String s) {
//                return null;
//            }
//
//            @Override
//            public String encodeRedirectUrl(String s) {
//                return null;
//            }
//
//            @Override
//            public void sendError(int i, String s) throws IOException {
//
//            }
//
//            @Override
//            public void sendError(int i) throws IOException {
//
//            }
//
//            @Override
//            public void sendRedirect(String s) throws IOException {
//
//            }
//
//            @Override
//            public void setDateHeader(String s, long l) {
//
//            }
//
//            @Override
//            public void addDateHeader(String s, long l) {
//
//            }
//
//            @Override
//            public void setHeader(String s, String s1) {
//
//            }
//
//            @Override
//            public void addHeader(String s, String s1) {
//
//            }
//
//            @Override
//            public void setIntHeader(String s, int i) {
//
//            }
//
//            @Override
//            public void addIntHeader(String s, int i) {
//
//            }
//
//            @Override
//            public void setStatus(int i) {
//
//            }
//
//            @Override
//            public void setStatus(int i, String s) {
//
//            }
//
//            @Override
//            public int getStatus() {
//                return 0;
//            }
//
//            @Override
//            public String getHeader(String s) {
//                return null;
//            }
//
//            @Override
//            public Collection<String> getHeaders(String s) {
//                return null;
//            }
//
//            @Override
//            public Collection<String> getHeaderNames() {
//                return null;
//            }
//
//            @Override
//            public String getCharacterEncoding() {
//                return null;
//            }
//
//            @Override
//            public String getContentType() {
//                return null;
//            }
//
//            @Override
//            public ServletOutputStream getOutputStream() throws IOException {
//                return null;
//            }
//
//            @Override
//            public PrintWriter getWriter() throws IOException {
//                return null;
//            }
//
//            @Override
//            public void setCharacterEncoding(String s) {
//
//            }
//
//            @Override
//            public void setContentLength(int i) {
//
//            }
//
//            @Override
//            public void setContentLengthLong(long l) {
//
//            }
//
//            @Override
//            public void setContentType(String s) {
//
//            }
//
//            @Override
//            public void setBufferSize(int i) {
//
//            }
//
//            @Override
//            public int getBufferSize() {
//                return 0;
//            }
//
//            @Override
//            public void flushBuffer() throws IOException {
//
//            }
//
//            @Override
//            public void resetBuffer() {
//
//            }
//
//            @Override
//            public boolean isCommitted() {
//                return false;
//            }
//
//            @Override
//            public void reset() {
//
//            }
//
//            @Override
//            public void setLocale(Locale locale) {
//
//            }
//
//            @Override
//            public Locale getLocale() {
//                return null;
//            }
//        };
//        response.reset();
//        response.setContentType(getContentType(getFileNamePre(fileKey)));
//        response.setHeader("Content-Disposition",
//                "attachment;filename=" + new String(pre.getBytes("gbk") , StandardCharsets.UTF_8));
//        FileInputStream fis = new FileInputStream(file);
//        BufferedInputStream buff = new BufferedInputStream(fis);
//        BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());
//        byte[] car = new byte[1024];
//        int l = 0;
//        while (l < file.length()) {
//            int j = buff.read(car, 0, 1024);
//            l += j;
//            out.write(car, 0, j);
//        }
//        fis.close();
//        buff.close();
//        out.close();
//        file.delete();
    }


    private static String getContentType(String fileType) {
        fileType = fileType.toLowerCase();
        String contentType = "";
        switch (fileType) {
            case "bmp":
                contentType = "image/bmp";
                break;
            case "gif":
                contentType = "image/gif";
                break;
            case "png":
            case "jpeg":
            case "jpg":
                contentType = "image/jpeg";
                break;
            case "html":
                contentType = "text/html";
                break;
            case "txt":
                contentType = "text/txt";
                break;
            case "xls":
                contentType = "application/excel";
                break;
            case "ppt":
            case "pptx":
                contentType = "application/powerpoint";
                break;
            case "doc":
            case "docx":
                contentType = "application/word";
                break;
            case "xml":
                contentType = "text/xml";
                break;
            case "mp4":
                contentType = "video/mp4";
                break;
            case "avi":
                contentType = "video/avi";
                break;
            case "flv":
                contentType = "video/flv";
                break;
            case "3gp":
                contentType = "video/3gp";
                break;
            case "mov":
                contentType = "video/mov";
                break;
            default:
                contentType = "application/stream";
                break;
        }
        return contentType;
    }

    public static String getFileNamePre(String fileName) {
        return fileName.substring(0, fileName.lastIndexOf("."));
    }

}
